Here we look at the “inner speech” scale (Hardy/Bentall; Packet 2) in detail.

Differences across fieldsites

Mean scores by site

First, let’s look at scores for participants in each site:

Note that this plot includes both average scores for each site (in black), and individual scores for all of the participants in that site (small, colorful points in the background, which are “jittered” around a little so that you can see them all).

Well, this is a little sobering: It looks like the participants in different samples within the same site varied about as much as participants did across sites. This is particularly striking in GH and VT, where we also have other reasons for concern about how people might have been using these scales differently…

Now let’s look at these differences in more detail using the “raw data” for individual questions, rather than these subscale scores.

Responses by question, by site

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vectorIgnoring unknown aesthetics: fill

I have not yet looked at this in detail.

Distribution of responses for individual participants, by site

Another thing we might be interested in is how individual participants responded: Were there people who said yes to everything, or no to everything? How do these distributions of responses differ across participants in different sites?

Let’s take a look:

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

I have not yet looked at this in detail.

Just for fun, here’s another way to look at the same data, overlaying the density distributions for each site on top of each other to see where they seem to be similar/different:

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

LS0tCnRpdGxlOiAnR3JhcHBsaW5nIHdpdGggdGhlICJJbm5lciBzcGVlY2giIHNjYWxlJwpzdWJ0aXRsZTogJ0xhc3QgdXBkYXRlZCAyMDE4LTA0LTA3JwpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGQUxTRX0KIyBzZXQgd29ya2luZyBkaXJlY3RvcgojIHNldHdkKCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL3RlbXBsZXRvbl9wYWNrZXRzL3BhY2tldHMxMjMvIikKCiMgbG9hZCBwYWNrYWdlcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShybXMpCmxpYnJhcnkoZ2dkZW5kcm8pCmxpYnJhcnkocHN5Y2gpCgojIGxvYWQgcXVlc3Rpb24ga2V5IChpbmNsdWRpbmcgbWFudWFsIHJldmVyc2UtY29kaW5nKQpxdWVzdGlvbl9rZXkgPC0gcmVhZC5jc3YoIi8vVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL3RlbXBsZXRvbl9wYWNrZXRzL3BhY2tldHMxMjMvcGFja2V0czEyM19xdWVzdGlvbl9rZXlfYnloYW5kLmNzdiIpCgojIGxvYWQgZGF0YSAocmV2ZXJzZS1jb2RlZCkKZF9sb25nIDwtIHJlYWRfY3N2KCIvL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy90ZW1wbGV0b25fcGFja2V0cy9wYWNrZXRzMTIzL3BhY2tldHMxMjNfZGF0YV9ieXF1ZXN0aW9uX2xvbmcuY3N2IikgJT4lCiAgbXV0YXRlKGN0cnkgPSBmYWN0b3IoY3RyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSkKZF9sb25nX3N1YnNjYWxlIDwtIHJlYWRfY3N2KCIvL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy90ZW1wbGV0b25fcGFja2V0cy9wYWNrZXRzMTIzL3BhY2tldHMxMjNfZGF0YV9ieXN1YnNjYWxlX2xvbmcuY3N2IikgJT4lCiAgbXV0YXRlKGN0cnkgPSBmYWN0b3IoY3RyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSkKCiMgbG9hZCBkYXRhIChiZWZvcmUgcmV2ZXJzZS1jb2RpbmcpCmRfYWxsIDwtIHJlYWQuY3N2KCIvL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy90ZW1wbGV0b25fcGFja2V0cy9wYWNrZXRzMTIzL3BhY2tldHMxMjNfZGF0YS5jc3YiKQoKIyBtYWtlIGN1c3RvbSBmdW5jdGlvbnMKcm91bmQyIDwtIGZ1bmN0aW9uKHgpIHtmb3JtYXQocm91bmQoeCwgMiksIGRpZ2l0cyA9IDIpfQpgYGAKCkhlcmUgd2UgbG9vayBhdCB0aGUgImlubmVyIHNwZWVjaCIgc2NhbGUgKEhhcmR5L0JlbnRhbGw7IFBhY2tldCAyKSBpbiBkZXRhaWwuCgojIERpZmZlcmVuY2VzIGFjcm9zcyBmaWVsZHNpdGVzCgojIyBNZWFuIHNjb3JlcyBieSBzaXRlCgpGaXJzdCwgbGV0J3MgbG9vayBhdCBzY29yZXMgZm9yIHBhcnRpY2lwYW50cyBpbiBlYWNoIHNpdGU6CgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfbG9uZ19zdWJzY2FsZV9ib290IDwtIGRfbG9uZ19zdWJzY2FsZSAlPiUKICBmaWx0ZXIoIWlzLm5hKHN1bV9zY29yZSkpICU+JQogIGdyb3VwX2J5KGN0cnksIHBhY2tldCwgc3Vic2NhbGUpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHN1bV9zY29yZSkpKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGZpbHRlcihzdWJzY2FsZSAhPSAiYXR0biIpICU+JQogIGxlZnRfam9pbihkX2xvbmdfc3Vic2NhbGUgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKCFpcy5uYShzdW1fc2NvcmUpKSAlPiUKICAgICAgICAgICAgICBjb3VudChjdHJ5LCBwYWNrZXQsIHN1YnNjYWxlKSkgJT4lCiAgbXV0YXRlKHBhY2tldCA9IHBhc3RlKCJwYWNrZXQiLCBwYWNrZXQpLAogICAgICAgICBjdHJ5ID0gZmFjdG9yKGN0cnksCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGFpbGFuZCIsICJjaGluYSIsICJ2YW51YXR1IikpLAogICAgICAgICBzdWJzY2FsZSA9IAogICAgICAgICAgIGZhY3RvcihzdWJzY2FsZSwKICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiZXh3bCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHdsX2V4dHJhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlXzAxdG8xNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2VfMTV0bzE2IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZXYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuX3NlbnNvcnlfc2Vla2luZyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5fYm9keV9hd2FyZW5lc3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuX3RyYWl0X21ldGFtb29kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVyMl9oYWxsdWNpbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19WSVNRX2RpYWxvZ2ljX3NwZWVjaCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZvX1ZJU1FfaW5uZXJfc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19WSVNRX2V2YWxfbW90aXZfaW5uZXJfc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19oYXJkeV9iZW50YWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVyX3Bvc2V5X2xvc2NoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jb19sZXdpY2tpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YV92YW5fZWxrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X2NvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfcG9zaXRpdmVfYmVsaWVmcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9jb2duaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfdW5jb250cm9sbGFiaWxpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfbmVlZF9jb250cm9sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19tZW50YWxfc3RhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19saWZlX2V2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbndfaW5hbmltYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19zZWx2ZXNfc291bHNfd29ybGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW53X2VwaXN0ZW1pYyIpLAogICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJhYnNvcnB0aW9uICh0ZWxsZWdlbikiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzb3JwdGlvbiAoZXh0cmEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICgjMS0xNCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKCMxNS0xNikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGlyaXR1YWwgZXZlbnRzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNvcnkgc2Vla2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJvZHkgYXdhcmVuZXNzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0dGVudGlvbiB0byBmZWVsaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhbGx1Y2luYXRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogZGlhbG9naWMgc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogaW5uZXIgc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogZXZhbHVhdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlubmVyIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYXJpbmcgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jb2Rpbmcgc3R5bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW5kIG1ldGFwaG9ycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBsYWNrIG9mIGNvZ25pdGl2ZSBjb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IHBvc2l0aXZlIGJlbGllZnMgcmU6IHdvcnJ5aW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IGNvZ25pdGl2ZSBzZWxmLWNvbnNjaW91c25lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRhY29nLjogdW5jb250cm9sbGFiaWxpdHkvZGFuZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IG5lZWQgdG8gY29udHJvbCB0aG91Z2h0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IG1lbnRhbCBzdGF0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBsaWZlIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IGluYW5pbWF0ZSBjb25zY2lvdXNuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVhbGlzbTogbWluZHMsIHNlbHZlcywgJiB3b3JsZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IGVwaXN0ZW1vbG9neSIpKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOX0KZ2dwbG90KGRfbG9uZ19zdWJzY2FsZV9ib290ICU+JQogICAgICAgICBmaWx0ZXIoc3Vic2NhbGUgPT0gImlubmVyIHNwZWVjaCIpLAogICAgICAgYWVzKHggPSBpbnRlcmFjdGlvbihwYXN0ZTAoInBhY2tldCAiLCBnc3ViKCJwYWNrZXQgIiwgIiIsIHBhY2tldCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RyeSwgc2VwID0gIjogIiksIAogICAgICAgICAgIHkgPSBNZWFuKSkgKwogICMgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IDApLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICAjIGdlb21faGxpbmUoYWVzKHlpbnRlcmNlcHQgPSAzNiksIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogICMgZmFjZXRfZ3JpZChnc3ViKCJwYWNrZXQgIiwgIiIsIHBhY2tldCkgfiAuKSArCiAgZ2VvbV9wb2ludChkYXRhID0gZF9sb25nX3N1YnNjYWxlICU+JQogICAgICAgICAgICAgICBmaWx0ZXIoc3Vic2NhbGUgPT0gImludm9faGFyZHlfYmVudGFsbCIsCiAgICAgICAgICAgICAgICAgICAgICAhaXMubmEoc3VtX3Njb3JlKSksCiAgICAgICAgICAgICBhZXMoeSA9IHN1bV9zY29yZSwgY29sb3IgPSBjdHJ5KSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHdpZHRoID0gMC4zLCBoZWlnaHQgPSAwKSwKICAgICAgICAgICAgIGFscGhhID0gMC4zLCBzaXplID0gMSkgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIpKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMCgiKG49IiwgbiwgIikiKSwgeSA9IExvd2VyKSwgCiAgICAgICAgICAgIHNpemUgPSAyLCBudWRnZV94ID0gMC4xNSwgaGp1c3QgPSAwKSArCiAgIyBzY2FsZV94X2Rpc2NyZXRlKGV4cGFuZCA9IGMoMCwgMSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygtMjAuNSwgMjAuNSksIGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDEwKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gaW5uZXIgc3BlZWNoIHNjb3JlcyBieSBzaXRlIChIYXJkeS9CZW50YWxsKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJBIGhpZ2hlciBzY29yZSBpbmRpY2F0ZXMgbW9yZSBlbmRvcnNlbWVudHMgb2YgJ2lubmVyIHNwZWVjaCcgZXZlbnRzIChyYW5nZTogLTIwIHRvIDIwKVxuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCBjb2xvciA9ICJTaXRlIiwKICAgICAgIHkgPSAiTWVhbiBzY29yZSIpCmBgYAoKTm90ZSB0aGF0IHRoaXMgcGxvdCBpbmNsdWRlcyBib3RoIGF2ZXJhZ2Ugc2NvcmVzIGZvciBlYWNoIHNpdGUgKGluIGJsYWNrKSwgYW5kIGluZGl2aWR1YWwgc2NvcmVzIGZvciBhbGwgb2YgdGhlIHBhcnRpY2lwYW50cyBpbiB0aGF0IHNpdGUgKHNtYWxsLCBjb2xvcmZ1bCBwb2ludHMgaW4gdGhlIGJhY2tncm91bmQsIHdoaWNoIGFyZSAiaml0dGVyZWQiIGFyb3VuZCBhIGxpdHRsZSBzbyB0aGF0IHlvdSBjYW4gc2VlIHRoZW0gYWxsKS4KCldlbGwsIHRoaXMgaXMgYSBsaXR0bGUgc29iZXJpbmc6IEl0IGxvb2tzIGxpa2UgdGhlIHBhcnRpY2lwYW50cyBpbiBkaWZmZXJlbnQgc2FtcGxlcyB3aXRoaW4gdGhlIHNhbWUgc2l0ZSB2YXJpZWQgYWJvdXQgYXMgbXVjaCBhcyBwYXJ0aWNpcGFudHMgZGlkIGFjcm9zcyBzaXRlcy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgc3RyaWtpbmcgaW4gR0ggYW5kIFZULCB3aGVyZSB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29ucyBmb3IgY29uY2VybiBhYm91dCBob3cgcGVvcGxlIG1pZ2h0IGhhdmUgYmVlbiB1c2luZyB0aGVzZSBzY2FsZXMgZGlmZmVyZW50bHkuLi4gCgpOb3cgbGV0J3MgbG9vayBhdCB0aGVzZSBkaWZmZXJlbmNlcyBpbiBtb3JlIGRldGFpbCB1c2luZyB0aGUgInJhdyBkYXRhIiBmb3IgaW5kaXZpZHVhbCBxdWVzdGlvbnMsIHJhdGhlciB0aGFuIHRoZXNlIHN1YnNjYWxlIHNjb3Jlcy4KCiMjIFJlc3BvbnNlcyBieSBxdWVzdGlvbiwgYnkgc2l0ZQoKYGBge3IsIGZpZy53aWR0aCA9IDEwLCBmaWcuYXNwID0gMX0KZF9wbG90IDwtIGRfbG9uZyAlPiUKICBmaWx0ZXIocXVlc3Rpb24gJWluJSBhcy5jaGFyYWN0ZXIoZGF0YS5mcmFtZShxdWVzdGlvbl9rZXkgJT4lIGZpbHRlcihieWhhbmRfc3Vic2NhbGUgPT0gImludm9faGFyZHlfYmVudGFsbCIpICU+JSBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpKSRxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpLAogICAgICAgICAhZ3JlcGwoImF0dG4iLCBxdWVzdGlvbikpICU+JQogIGxlZnRfam9pbihxdWVzdGlvbl9rZXkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLCAKICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX3N1YnNjYWxlKSAlPiUKICAgICAgICAgICAgICByZW5hbWUocXVlc3Rpb24gPSBxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsCiAgICAgICAgICAgICAgICAgICAgIGNvZGluZyA9IGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgIHN1YnNjYWxlID0gYnloYW5kX3N1YnNjYWxlKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoY29kaW5nID0gZmFjdG9yKGNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIi0xIiwgIjEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIihSRVZFUlNFRCkiLCAiIikpLAogICAgICAgICBxdWVzdGlvbl90ZXh0X3Nob3J0ID0gZ3N1YignKC57MSwzMH0pKFxcc3wkKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXDFcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChxdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6ICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHIocXVlc3Rpb25fdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDEsIHN0b3AgPSAxMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nKSkpICU+JQogIGNvdW50KGN0cnksIHBhY2tldCwgcXVlc3Rpb25fdGV4dF9zaG9ydCwgcmVzcG9uc2UpICU+JQogIGZpbHRlcihwYWNrZXQgIT0gIjEiKSAlPiUKICBzcHJlYWQocmVzcG9uc2UsIG4pICU+JQogIG11dGF0ZV9hdCh2YXJzKGAtMmA6YDJgKSwgCiAgICAgICAgICAgIGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUKICBhcnJhbmdlKGN0cnksIGAtMmApICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigib3JkZXIiKSAlPiUKICBtdXRhdGUob3JkZXIgPSBhcy5udW1lcmljKG9yZGVyKSwKICAgICAgICAgYWdyZWVfbiA9IGAxYCArIGAyYCwKICAgICAgICAgdG90YWxfbiA9IGAtMmAgKyBgLTFgICsgYDBgICsgYDFgICsgYDJgKSAlPiUKICBnYXRoZXIocmVzcG9uc2UsIG4sIGMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTIiLCAiLTEiLCAiMCIsICIxIiwgIjIiKSksCiAgICAgICAgIGN0cnkgPSBmYWN0b3IoY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaGFuYSIsICJ0aGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaW5hIiwgInZhbnVhdHUiKSwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJVUyIsICJHaGFuYSIsICJUaGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoaW5hIiwgIlZhbnVhdHUiKSkpICU+JQogIGRpc3RpbmN0KCkKCmFkanVzdCA8LSAxNQoKZ2dwbG90KGRfcGxvdCAlPiUKICAgICAgICAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3Ryb25nbHkgZGlzYWdyZWUiLCAiRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmVpdGhlciBhZ3JlZSBub3IgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWdyZWUiLCAiU3Ryb25nbHkgYWdyZWUiKSksCiAgICAgICAgICAgICAgICBwYWNrZXQgPSBmYWN0b3IocGFja2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIjIiLCAiMyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlBhY2tldCAyIiwgIlBhY2tldCAzIikpKSwKICAgICAgIGFlcyh4ID0gcmVvcmRlcihxdWVzdGlvbl90ZXh0X3Nob3J0LCBkZXNjKHF1ZXN0aW9uX3RleHRfc2hvcnQpKSwKICAgICAgICAgICAjIHggPSByZW9yZGVyKHF1ZXN0aW9uX3RleHRfc2hvcnQsIGRlc2Mob3JkZXIpKSwKICAgICAgICAgICB5ID0gbiwgZmlsbCA9IHJlc3BvbnNlKSkgKwogIGZhY2V0X2dyaWQocGFja2V0IH4gY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2soKSwgc3RhdCA9ICJpZGVudGl0eSIsIAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChkYXRhID0gZF9wbG90ICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KGN0cnksIHBhY2tldCwgcXVlc3Rpb25fdGV4dF9zaG9ydCwgb3JkZXIsIAogICAgICAgICAgICAgICAgICAgICAgIGFncmVlX24sIHRvdGFsX24pICU+JQogICAgICAgICAgICAgIG11dGF0ZShwYWNrZXQgPSBmYWN0b3IocGFja2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiMiIsICIzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJQYWNrZXQgMiIsICJQYWNrZXQgMyIpKSksCiAgICAgICAgICAgIGFlcyh5ID0gbWF4KGRfcGxvdCR0b3RhbF9uKSArIGFkanVzdCwgZmlsbCA9IE5VTEwsCiAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChhZ3JlZV9uL3RvdGFsX24sIDIpKjEwMCwgIiUiKSksIAogICAgICAgICAgICBzaXplID0gMywgaGp1c3QgPSAxKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgbWF4KGRfcGxvdCR0b3RhbF9uKSArIGFkanVzdCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlBSR24iKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJSZXNwb25zZXMgdG8gJ0lubmVyIHNwZWVjaCcgKEhhcmR5L0JlbnRhbGwpIHNjYWxlIGl0ZW1zIiwKICAgICAgIHN1YnRpdGxlID0gIiUgY29ycmVzcG9uZHMgdG8gcmVzcG9uc2VzIG9mICdBZ3JlZScgb3IgJ1N0cm9uZ2x5IGFncmVlJyAoZ3JlZW4pIiwKICAgICAgIHggPSAiIiwgeSA9ICJDb3VudCBvZiByZXNwb25zZXMiLCBmaWxsID0gIlJlc3BvbnNlIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQogIGNvb3JkX2ZsaXAoKQoKcm0oYWRqdXN0KQpgYGAKCkkgaGF2ZSBub3QgeWV0IGxvb2tlZCBhdCB0aGlzIGluIGRldGFpbC4KCiMgRGlzdHJpYnV0aW9uIG9mIHJlc3BvbnNlcyBmb3IgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMsIGJ5IHNpdGUKCkFub3RoZXIgdGhpbmcgd2UgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiBpcyBob3cgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgcmVzcG9uZGVkOiBXZXJlIHRoZXJlIHBlb3BsZSB3aG8gc2FpZCB5ZXMgdG8gZXZlcnl0aGluZywgb3Igbm8gdG8gZXZlcnl0aGluZz8gSG93IGRvIHRoZXNlIGRpc3RyaWJ1dGlvbnMgb2YgcmVzcG9uc2VzIGRpZmZlciBhY3Jvc3MgcGFydGljaXBhbnRzIGluIGRpZmZlcmVudCBzaXRlcz8KCkxldCdzIHRha2UgYSBsb29rOgoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAxfQpkX2xvbmcgJT4lCiAgZmlsdGVyKHBhY2tldCA9PSAyKSAlPiUKICBmaWx0ZXIocXVlc3Rpb24gJWluJSBhcy5jaGFyYWN0ZXIoZGF0YS5mcmFtZShxdWVzdGlvbl9rZXkgJT4lIGZpbHRlcihieWhhbmRfc3Vic2NhbGUgPT0gImludm9faGFyZHlfYmVudGFsbCIpICU+JSBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpKSRxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpLAogICAgICAgICAhZ3JlcGwoImF0dG4iLCBxdWVzdGlvbiksCiAgICAgICAgICFpcy5uYShyZXNwb25zZSkpICU+JQogIGxlZnRfam9pbihxdWVzdGlvbl9rZXkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLCAKICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX3N1YnNjYWxlKSAlPiUKICAgICAgICAgICAgICByZW5hbWUocXVlc3Rpb24gPSBxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsCiAgICAgICAgICAgICAgICAgICAgIGNvZGluZyA9IGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgIHN1YnNjYWxlID0gYnloYW5kX3N1YnNjYWxlKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBmYWN0b3IocmVzcG9uc2UpLAogICAgICAgICBjb2RpbmcgPSBmYWN0b3IoY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTEiLCAiMSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiKFJFVkVSU0VEKSIsICIiKSksCiAgICAgICAgIHF1ZXN0aW9uX3RleHRfc2hvcnQgPSBnc3ViKCcoLnsxLDEzMH0pKFxcc3wkKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXDFcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChzdWJzdHIocXVlc3Rpb25fdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDEsIHN0b3AgPSAxMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nKSksCiAgICAgICAgIHN1YnNjYWxlID0gZmFjdG9yKHN1YnNjYWxlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiSW5uZXIgc3BlZWNoIChIYXJkeS9CZW50YWxsKSIpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBjb3VudChjdHJ5LCBzdWJzY2FsZSwgc3ViaiwgcmVzcG9uc2UpICU+JQogIHNwcmVhZChyZXNwb25zZSwgbikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoYyhgLTJgLCBgLTFgLCBgMGAsIGAxYCwgYDJgKSksIGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUKICBtdXRhdGUodG90YWxfbiA9IGAtMmAgKyBgLTFgICsgYDBgICsgYDFgICsgYDJgLAogICAgICAgICBwcm9wX24yID0gYC0yYC90b3RhbF9uLAogICAgICAgICBwcm9wX24xID0gYC0xYC90b3RhbF9uLAogICAgICAgICBwcm9wX24wID0gYDBgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDEgPSBgMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9wMiA9IGAyYC90b3RhbF9uLAogICAgICAgICBjdHJ5ID0gZmFjdG9yKGN0cnksCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGluYSIsICJ2YW51YXR1IiksCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiVVMiLCAiR2hhbmEiLCAiVGhhaWxhbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGluYSIsICJWYW51YXR1IikpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHNlbGVjdCgtYyhgLTJgLCBgLTFgLCBgMGAsIGAxYCwgYDJgKSkgJT4lCiAgZ2F0aGVyKHJlc3BvbnNlLCBwcm9wLCBzdGFydHNfd2l0aCgicHJvcCIpKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBmYWN0b3IocmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInByb3BfbjIiLCAicHJvcF9uMSIsICJwcm9wX24wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3BfcDEiLCAicHJvcF9wMiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTdHJvbmdseSBkaXNhZ3JlZSIsICJEaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5laXRoZXIgYWdyZWUgbm9yIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWdyZWUiLCAiU3Ryb25nbHkgYWdyZWUiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IHByb3AsIGZpbGwgPSBjdHJ5KSkgKwogIGZhY2V0X2dyaWQocmVzcG9uc2UgfiBjdHJ5LCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxLzEwKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjI1KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTAwLCAxMCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHRoZW1lX2J3KCkgKwogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9ucyBvZiBob3cgbWFueSB0aW1lcyBwYXJ0aWNpcGFudHMgZW5kb3JzZWQgZWFjaCByZXNwb25zZSBvcHRpb24gZm9yIHRoZSAnSW5uZXIgc3BlZWNoJyAoSGFyZHkvQmVudGFsbCkgc2NhbGUgaXRlbXMgKFBhY2tldCAyKSIsCiAgICAgICB4ID0gIlByb3BvcnRpb24gb2YgcmVzcG9uc2VzIChhdCB0aGUgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudCBsZXZlbCkiLCB5ID0gIkNvdW50IG9mIHBhcnRpY2lwYW50cyIsIGZpbGwgPSAiU2l0ZSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAxfQpkX2xvbmcgJT4lCiAgZmlsdGVyKHBhY2tldCA9PSAzKSAlPiUKICBmaWx0ZXIocXVlc3Rpb24gJWluJSBhcy5jaGFyYWN0ZXIoZGF0YS5mcmFtZShxdWVzdGlvbl9rZXkgJT4lIGZpbHRlcihieWhhbmRfc3Vic2NhbGUgPT0gImludm9faGFyZHlfYmVudGFsbCIpICU+JSBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpKSRxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpLAogICAgICAgICAhZ3JlcGwoImF0dG4iLCBxdWVzdGlvbiksCiAgICAgICAgICFpcy5uYShyZXNwb25zZSkpICU+JQogIGxlZnRfam9pbihxdWVzdGlvbl9rZXkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLCAKICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX3N1YnNjYWxlKSAlPiUKICAgICAgICAgICAgICByZW5hbWUocXVlc3Rpb24gPSBxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsCiAgICAgICAgICAgICAgICAgICAgIGNvZGluZyA9IGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgIHN1YnNjYWxlID0gYnloYW5kX3N1YnNjYWxlKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBmYWN0b3IocmVzcG9uc2UpLAogICAgICAgICBjb2RpbmcgPSBmYWN0b3IoY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTEiLCAiMSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiKFJFVkVSU0VEKSIsICIiKSksCiAgICAgICAgIHF1ZXN0aW9uX3RleHRfc2hvcnQgPSBnc3ViKCcoLnsxLDEzMH0pKFxcc3wkKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXDFcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChzdWJzdHIocXVlc3Rpb25fdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDEsIHN0b3AgPSAxMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nKSksCiAgICAgICAgIHN1YnNjYWxlID0gZmFjdG9yKHN1YnNjYWxlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiSW5uZXIgc3BlZWNoIChIYXJkeS9CZW50YWxsKSIpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBjb3VudChjdHJ5LCBzdWJzY2FsZSwgc3ViaiwgcmVzcG9uc2UpICU+JQogIHNwcmVhZChyZXNwb25zZSwgbikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoYyhgLTJgLCBgLTFgLCBgMGAsIGAxYCwgYDJgKSksIGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUKICBtdXRhdGUodG90YWxfbiA9IGAtMmAgKyBgLTFgICsgYDBgICsgYDFgICsgYDJgLAogICAgICAgICBwcm9wX24yID0gYC0yYC90b3RhbF9uLAogICAgICAgICBwcm9wX24xID0gYC0xYC90b3RhbF9uLAogICAgICAgICBwcm9wX24wID0gYDBgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDEgPSBgMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9wMiA9IGAyYC90b3RhbF9uLAogICAgICAgICBjdHJ5ID0gZmFjdG9yKGN0cnksCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGluYSIsICJ2YW51YXR1IiksCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiVVMiLCAiR2hhbmEiLCAiVGhhaWxhbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGluYSIsICJWYW51YXR1IikpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHNlbGVjdCgtYyhgLTJgLCBgLTFgLCBgMGAsIGAxYCwgYDJgKSkgJT4lCiAgZ2F0aGVyKHJlc3BvbnNlLCBwcm9wLCBzdGFydHNfd2l0aCgicHJvcCIpKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBmYWN0b3IocmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInByb3BfbjIiLCAicHJvcF9uMSIsICJwcm9wX24wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3BfcDEiLCAicHJvcF9wMiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTdHJvbmdseSBkaXNhZ3JlZSIsICJEaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5laXRoZXIgYWdyZWUgbm9yIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWdyZWUiLCAiU3Ryb25nbHkgYWdyZWUiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IHByb3AsIGZpbGwgPSBjdHJ5KSkgKwogIGZhY2V0X2dyaWQocmVzcG9uc2UgfiBjdHJ5LCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxLzEwKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjI1KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTAwLCAxMCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHRoZW1lX2J3KCkgKwogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9ucyBvZiBob3cgbWFueSB0aW1lcyBwYXJ0aWNpcGFudHMgZW5kb3JzZWQgZWFjaCByZXNwb25zZSBvcHRpb24gZm9yIHRoZSAnSW5uZXIgc3BlZWNoJyAoSGFyZHkvQmVudGFsbCkgc2NhbGUgaXRlbXMgKFBhY2tldCAzKSIsCiAgICAgICB4ID0gIlByb3BvcnRpb24gb2YgcmVzcG9uc2VzIChhdCB0aGUgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudCBsZXZlbCkiLCB5ID0gIkNvdW50IG9mIHBhcnRpY2lwYW50cyIsIGZpbGwgPSAiU2l0ZSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCmBgYAoKSSBoYXZlIG5vdCB5ZXQgbG9va2VkIGF0IHRoaXMgaW4gZGV0YWlsLgoKSnVzdCBmb3IgZnVuLCBoZXJlJ3MgYW5vdGhlciB3YXkgdG8gbG9vayBhdCB0aGUgc2FtZSBkYXRhLCBvdmVybGF5aW5nIHRoZSBkZW5zaXR5IGRpc3RyaWJ1dGlvbnMgZm9yIGVhY2ggc2l0ZSBvbiB0b3Agb2YgZWFjaCBvdGhlciB0byBzZWUgd2hlcmUgdGhleSBzZWVtIHRvIGJlIHNpbWlsYXIvZGlmZmVyZW50OgoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAzfQpkX2xvbmcgJT4lCiAgZmlsdGVyKHBhY2tldCA9PSAyKSAlPiUKICBmaWx0ZXIocXVlc3Rpb24gJWluJSBhcy5jaGFyYWN0ZXIoZGF0YS5mcmFtZShxdWVzdGlvbl9rZXkgJT4lIGZpbHRlcihieWhhbmRfc3Vic2NhbGUgPT0gImludm9faGFyZHlfYmVudGFsbCIpICU+JSBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpKSRxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpLAogICAgICAgICAhZ3JlcGwoImF0dG4iLCBxdWVzdGlvbiksCiAgICAgICAgICFpcy5uYShyZXNwb25zZSkpICU+JQogIGxlZnRfam9pbihxdWVzdGlvbl9rZXkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLCAKICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX3N1YnNjYWxlKSAlPiUKICAgICAgICAgICAgICByZW5hbWUocXVlc3Rpb24gPSBxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsCiAgICAgICAgICAgICAgICAgICAgIGNvZGluZyA9IGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgIHN1YnNjYWxlID0gYnloYW5kX3N1YnNjYWxlKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoY29kaW5nID0gZmFjdG9yKGNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIi0xIiwgIjEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIihSRVZFUlNFRCkiLCAiIikpLAogICAgICAgICBxdWVzdGlvbl90ZXh0X3Nob3J0ID0gZ3N1YignKC57MSwxMzB9KShcXHN8JCknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFwxXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoc3Vic3RyKHF1ZXN0aW9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAxLCBzdG9wID0gMTAwMDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiLi4uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZykpLAogICAgICAgICBzdWJzY2FsZSA9IGZhY3RvcihzdWJzY2FsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIklubmVyIHNwZWVjaCAoSGFyZHkvQmVudGFsbCkiKSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoY3RyeSwgc3Vic2NhbGUsIHN1YmosIHJlc3BvbnNlKSAlPiUKICBzcHJlYWQocmVzcG9uc2UsIG4pICU+JQogIG11dGF0ZV9hdCh2YXJzKGMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpLCBmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lCiAgbXV0YXRlKHRvdGFsX24gPSBgLTJgICsgYC0xYCArIGAwYCArIGAxYCArIGAyYCwKICAgICAgICAgcHJvcF9uMiA9IGAtMmAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMSA9IGAtMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMCA9IGAwYC90b3RhbF9uLAogICAgICAgICBwcm9wX3AxID0gYDFgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDIgPSBgMmAvdG90YWxfbiwKICAgICAgICAgY3RyeSA9IGZhY3RvcihjdHJ5LAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoYW5hIiwgInRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbmEiLCAidmFudWF0dSIpLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlVTIiwgIkdoYW5hIiwgIlRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hpbmEiLCAiVmFudWF0dSIpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBzZWxlY3QoLWMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpICU+JQogIGdhdGhlcihyZXNwb25zZSwgcHJvcCwgc3RhcnRzX3dpdGgoInByb3AiKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJwcm9wX24yIiwgInByb3BfbjEiLCAicHJvcF9uMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9wX3AxIiwgInByb3BfcDIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3Ryb25nbHkgZGlzYWdyZWUiLCAiRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZWl0aGVyIGFncmVlIG5vciBkaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFncmVlIiwgIlN0cm9uZ2x5IGFncmVlIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwcm9wLCBmaWxsID0gY3RyeSkpICsKICBmYWNldF9ncmlkKHJlc3BvbnNlIH4gLiwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmaXhlZCIpICsKICBnZW9tX2RlbnNpdHkoYWxwaGEgPSAwLjMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSwgYnJlYWtzID0gc2VxKDAsIDEsIDAuMjUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMgb2YgaG93IG1hbnkgdGltZXMgcGFydGljaXBhbnRzIGVuZG9yc2VkIGVhY2hcbnJlc3BvbnNlIG9wdGlvbiBmb3IgdGhlICdJbm5lciBzcGVlY2gnIChIYXJkeS9CZW50YWxsKSBzY2FsZSBpdGVtc1xuKFBhY2tldCAyKSIsCiAgICAgICB4ID0gIlByb3BvcnRpb24gb2YgcmVzcG9uc2VzIChhdCB0aGUgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudCBsZXZlbCkiLCB5ID0gIkNvdW50IG9mIHBhcnRpY2lwYW50cyIsIGZpbGwgPSAiU2l0ZSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIiwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDN9CmRfbG9uZyAlPiUKICBmaWx0ZXIocGFja2V0ID09IDMpICU+JQogIGZpbHRlcihxdWVzdGlvbiAlaW4lIGFzLmNoYXJhY3RlcihkYXRhLmZyYW1lKHF1ZXN0aW9uX2tleSAlPiUgZmlsdGVyKGJ5aGFuZF9zdWJzY2FsZSA9PSAiaW52b19oYXJkeV9iZW50YWxsIikgJT4lIGRpc3RpbmN0KHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCkpJHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCksCiAgICAgICAgICFncmVwbCgiYXR0biIsIHF1ZXN0aW9uKSwKICAgICAgICAgIWlzLm5hKHJlc3BvbnNlKSkgJT4lCiAgbGVmdF9qb2luKHF1ZXN0aW9uX2tleSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsIAogICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX2NvZGluZywKICAgICAgICAgICAgICAgICAgICAgICBieWhhbmRfc3Vic2NhbGUpICU+JQogICAgICAgICAgICAgIHJlbmFtZShxdWVzdGlvbiA9IHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCwKICAgICAgICAgICAgICAgICAgICAgY29kaW5nID0gYnloYW5kX2NvZGluZywKICAgICAgICAgICAgICAgICAgICAgc3Vic2NhbGUgPSBieWhhbmRfc3Vic2NhbGUpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIG11dGF0ZShjb2RpbmcgPSBmYWN0b3IoY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTEiLCAiMSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiKFJFVkVSU0VEKSIsICIiKSksCiAgICAgICAgIHF1ZXN0aW9uX3RleHRfc2hvcnQgPSBnc3ViKCcoLnsxLDEzMH0pKFxcc3wkKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXDFcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChzdWJzdHIocXVlc3Rpb25fdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDEsIHN0b3AgPSAxMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nKSksCiAgICAgICAgIHN1YnNjYWxlID0gZmFjdG9yKHN1YnNjYWxlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiSW5uZXIgc3BlZWNoIChIYXJkeS9CZW50YWxsKSIpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBjb3VudChjdHJ5LCBzdWJzY2FsZSwgc3ViaiwgcmVzcG9uc2UpICU+JQogIHNwcmVhZChyZXNwb25zZSwgbikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoYyhgLTJgLCBgLTFgLCBgMGAsIGAxYCwgYDJgKSksIGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUKICBtdXRhdGUodG90YWxfbiA9IGAtMmAgKyBgLTFgICsgYDBgICsgYDFgICsgYDJgLAogICAgICAgICBwcm9wX24yID0gYC0yYC90b3RhbF9uLAogICAgICAgICBwcm9wX24xID0gYC0xYC90b3RhbF9uLAogICAgICAgICBwcm9wX24wID0gYDBgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDEgPSBgMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9wMiA9IGAyYC90b3RhbF9uLAogICAgICAgICBjdHJ5ID0gZmFjdG9yKGN0cnksCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGluYSIsICJ2YW51YXR1IiksCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiVVMiLCAiR2hhbmEiLCAiVGhhaWxhbmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGluYSIsICJWYW51YXR1IikpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHNlbGVjdCgtYyhgLTJgLCBgLTFgLCBgMGAsIGAxYCwgYDJgKSkgJT4lCiAgZ2F0aGVyKHJlc3BvbnNlLCBwcm9wLCBzdGFydHNfd2l0aCgicHJvcCIpKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBmYWN0b3IocmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInByb3BfbjIiLCAicHJvcF9uMSIsICJwcm9wX24wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3BfcDEiLCAicHJvcF9wMiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTdHJvbmdseSBkaXNhZ3JlZSIsICJEaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5laXRoZXIgYWdyZWUgbm9yIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWdyZWUiLCAiU3Ryb25nbHkgYWdyZWUiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IHByb3AsIGZpbGwgPSBjdHJ5KSkgKwogIGZhY2V0X2dyaWQocmVzcG9uc2UgfiAuLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZpeGVkIikgKwogIGdlb21fZGVuc2l0eShhbHBoYSA9IDAuMykgKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEpLCBicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHRoZW1lX2J3KCkgKwogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9ucyBvZiBob3cgbWFueSB0aW1lcyBwYXJ0aWNpcGFudHMgZW5kb3JzZWQgZWFjaFxucmVzcG9uc2Ugb3B0aW9uIGZvciB0aGUgJ0lubmVyIHNwZWVjaCcgKEhhcmR5L0JlbnRhbGwpIHNjYWxlIGl0ZW1zXG4oUGFja2V0IDMpIiwKICAgICAgIHggPSAiUHJvcG9ydGlvbiBvZiByZXNwb25zZXMgKGF0IHRoZSBpbmRpdmlkdWFsIHBhcnRpY2lwYW50IGxldmVsKSIsIHkgPSAiQ291bnQgb2YgcGFydGljaXBhbnRzIiwgZmlsbCA9ICJTaXRlIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpgYGAK